package pe.com.pgn.consolidadorventas.servidorcentral.web;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.com.pgn.consolidadorventas.servidorcentral.dbo.Estacion;
import pe.com.pgn.consolidadorventas.servidorcentral.dbo.GlpVenta;
import pe.com.pgn.consolidadorventas.servidorcentral.service.EstacionService;
import pe.com.pgn.consolidadorventas.servidorcentral.service.ServidorCentralService;
import pe.com.pgn.consolidadorventas.servidorcentral.util.Constantes;
import pe.com.pgn.consolidadorventas.servidorcentral.util.ReportGenerator;
import pe.com.pgn.consolidadorventas.servidorcentral.web.domain.GlpVentasPorDia;

@Controller("ventasController")
public class VentasController {
	
	@Autowired
	@Qualifier("servidorCentralServiceImpl")
	ServidorCentralService servidorCentralService;
	
	@Autowired
	@Qualifier("estacionServiceImpl")
	EstacionService estacionService;
	
	String vista;
	public VentasController(){
		vista = "consultaVentas";
	}
	
	 @RequestMapping(value="/consultaVentas.php")
	 public ModelAndView consultaVentas(HttpServletRequest request, HttpServletResponse response) {
		  ModelAndView mav = new ModelAndView(vista); 
		  String accion = request.getParameter("accion");
	      
	      if(accion!=null){
	    	  if(accion.equals("consultar")){
	    		    String fecha = request.getParameter("fecha");
	    	        int idEstacion = Integer.parseInt(request.getParameter("estacion"));
	    	        
	    	        //Obtenemos datos de la estacion
	    	        Estacion e = estacionService.obtenerEstacionXId(idEstacion);
	    	        
	    	        //Obtenemos las ventas por dia para esa estacion
	    	        GlpVentasPorDia ventasPorDia = null;
	    	        BigDecimal total = new BigDecimal("0.0");
	    	        if(e.getTipoVenta()==Constantes.TIPO_VENTA_GLP && fecha!=null){
	    	        	ventasPorDia = (GlpVentasPorDia)estacionService.consultarVentasPorDiaEstacion(idEstacion, fecha,e.getTipoVenta());
	    	        	if(ventasPorDia!=null){
	    	        		List<GlpVenta> aux =  ventasPorDia.getListaDboVentas();
		    	        	List<GlpVenta> aux01 = new ArrayList<GlpVenta>();
		    	        	if(aux!=null){
		    	        		int dim = aux.size();
			    	        	for(int i=0;i<dim;i++){
			    	        		GlpVenta x = aux.get(i);
			    	        		if(x.getCustName()!=null){
			    	        			aux01.add(x);
			    	        			total=total.add(x.getTotalPen());
			    	        		}
			    	        	}
			    	        	mav.addObject("ventas",aux01);
				            	mav.addObject("resumen",ventasPorDia.getResumen());
				            	mav.addObject("totalVentas",total.toString());
		    	        	}	
	    	        	}
	    	        }
	    	        
	    	        mav.addObject("fecha",fecha);
	            	mav.addObject("idEstacion",idEstacion);
	    	  }
	      }
		 
		  List<Estacion> listaEstaciones = estacionService.obtenerEstaciones();
	     
	      mav.addObject("listaEstaciones", listaEstaciones);
	      return mav;
	}
	 
	@RequestMapping(value="/generarReporte.php")
	public ModelAndView generarReporte(HttpServletRequest request, HttpServletResponse response){
		    ModelAndView mav = new ModelAndView("pdf");
		    String fecha = request.getParameter("fecha");
		    int idEstacion = Integer.parseInt(request.getParameter("id"));
	        
	        //Obtenemos datos de la estacion
	        Estacion e = estacionService.obtenerEstacionXId(idEstacion);
	        
	        //Obtenemos las ventas por dia para esa estacion
	        GlpVentasPorDia ventasPorDia = null;
	        BigDecimal total = new BigDecimal("0.0");
	        if(e.getTipoVenta()==Constantes.TIPO_VENTA_GLP && fecha!=null){
	        	ventasPorDia = (GlpVentasPorDia)estacionService.consultarVentasPorDiaEstacion(idEstacion, fecha,e.getTipoVenta());
	        	if(ventasPorDia!=null){
	        		List<GlpVenta> aux =  ventasPorDia.getListaDboVentas();
		        	List<GlpVenta> aux01 = new ArrayList<GlpVenta>();
		        	
		        	if(aux!=null){
		        		int dim = aux.size();
			        	for(int i=0;i<dim;i++){
			        		GlpVenta x = aux.get(i);
			        		if(x.getCustName()!=null){
			        			aux01.add(x);
			        			total=total.add(x.getTotalPen());
			        		}
			        	}
			        	
			        	ServletContext srvContext = request.getSession().getServletContext();
			        	ReportGenerator reporteador = new ReportGenerator();
			        	reporteador.setUbicacionJRXML("/WEB-INF/reportes/");
			        	reporteador.setNombreJRXML("ventas.jrxml");
			        	reporteador.setNombreReportePDF("ventas.pdf");
			        	reporteador.setCamposReporte(aux01);
						Map<String,String> parametros = new HashMap<String,String>();
						parametros.put("nombreEstacion",e.getNombreEstacion());
						parametros.put("fecha",fecha);
						parametros.put("sumaTotal",total.toString());
						parametros.put("rutaImagen",srvContext.getRealPath("/resources/img/pgn.jpg"));
						reporteador.setParametrosReporte(parametros);
						mav.addObject("reporteador",reporteador);
		        	}
	        	}	
	        }
		 return mav;
	}
	 

}
